import { PageContainer } from '@ant-design/pro-components';
import type { ActionType } from '@ant-design/pro-components';
import type { FC } from 'react';
import { useRef, useState, useEffect } from 'react';
import type { LessonItem } from './data.d';
import { getLessonList } from './service';
import { createSearchColumns } from './components/SearchForm';
import LessonTable from './components/LessonTable';

// 从数据中提取唯一枚举值的辅助函数
const extractEnumValues = (data: LessonItem[], field: keyof LessonItem): string[] => {
  const values = new Set<string>();
  data.forEach((item) => {
    const value = item[field];
    if (value && typeof value === 'string') {
      values.add(value);
    }
  });
  return Array.from(values).sort();
};

const Lesson: FC = () => {
  const actionRef = useRef<ActionType>(null);
  // 存储从数据中提取的枚举值
  const [enumValues, setEnumValues] = useState<{
    来源: string[];
    失效工序: string[];
    工厂: string[];
    项目名称: string[];
  }>({
    来源: [],
    失效工序: [],
    工厂: [],
    项目名称: [],
  });

  // 在组件挂载时获取一次完整数据来生成枚举选项
  useEffect(() => {
    const loadEnumValues = async () => {
      try {
        // 获取所有数据（不分页）来提取枚举值
        const result = await getLessonList({
          current: 1,
          pageSize: 10000, // 设置一个很大的值以获取所有数据
        });
        if (result.data && result.data.length > 0) {
          setEnumValues({
            来源: extractEnumValues(result.data, '来源'),
            失效工序: extractEnumValues(result.data, '失效工序'),
            工厂: extractEnumValues(result.data, '工厂'),
            项目名称: extractEnumValues(result.data, '项目名称'),
          });
        }
      } catch (error) {
        console.error('Failed to load enum values:', error);
      }
    };
    loadEnumValues();
  }, []);

  // 使用 SearchForm 组件创建列配置
  const columns = createSearchColumns(enumValues);

  return (
    <PageContainer>
      <LessonTable actionRef={actionRef} columns={columns} />
    </PageContainer>
  );
};

export default Lesson;

